|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(*~\Глагол\Отделы\Поле~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) (**) ОТДЕЛ ПолеСВопросом; (*============================================================================* * НАЗНАЧЕНИЕ: вывод вопроса *============================================================================*) ИСПОЛЬЗУЕТ Надел, Поле, Подложка, Записка, Черта, Кнопка, Ввод ИЗ "..\Обмен\"; ПОСТ (* действия кнопок и состояние поля *) сДа- = 1; сНет- = 2; (******************************************************************************) ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка); (* получить и обработать управляющие послания *) УКАЗ ДЛЯ посылка ВИДА | Ввод.ОтКлавиш: ЕСЛИ посылка.код = 1BH ТО (* Esc *) поле.состояние:=Поле.сОтмена; посылка.код:=0 КОН | Кнопка.Посылка: поле.состояние:=посылка.кнопка.действие ИНАЧЕ КОН КОН Приём; (******************************************************************************) ЗАДАЧА Выполнить-( (* Цель: осуществить вывод вопроса *) (******************************************************************************) (* До: *) заголовок-:ЦЕПЬ; (* заголовок подложки *) строк:ЦЕЛ; (* желаемая высота текста *) колонок:ЦЕЛ; (* желаемая ширина текста *) окружение:Поле.Доступ;(* окружающее поле *) номерСправки:ЦЕЛ; (* номер справки или 0 *) текст-:ЦЕПЬ (* текст вопроса *) (* Ответ: *) ):ЦЕЛ; (* состояние поля после отработки *) (******************************************************************************) ПОСТ (* цепочки для кнопок *) цДа ="[ ~Да ]"; цНет ="[ ~Нет ]"; цОтмена ="[ Отмена ]"; длДа =ДЛИНА(цДа)-1; длНет =ДЛИНА(цНет)-1; длОтмена=ДЛИНА(цОтмена); промежуток=2; (* промежуток между кнопками *) занято =длДа + промежуток + длНет + промежуток + длОтмена; ПЕР поле:Поле.Доступ; подложка:Подложка.Доступ; черта:Черта.Доступ; записка:Записка.Доступ; кнДа,кнНет,кнОтмена:Кнопка.Доступ; позДа,позНет,позОтмена:ЦЕЛ; УКАЗ (* вычисление местоположения кнопок *) ЕСЛИ занято > колонок ТО колонок:=занято КОН; позДа:=2+((колонок-занято+1) ДЕЛИТЬ 2); позНет:=позДа+длДа+промежуток; позОтмена:=позНет+длНет+промежуток; (* создаём поле *) поле:=Поле.Создать(0,0,строк+4,колонок+4,окружение,ВКЛ,Приём); (* создаём наделы *) подложка:=Подложка.Создать(0,0,0,0,заголовок); записка:=Записка.Создать(1,2,-3,-2,текст); черта:=Черта.Создать(-3,0,1,0); кнДа:=Кнопка.Создать(-2,позДа,цДа,сДа,ВКЛ); кнНет:=Кнопка.Создать(-2,позНет,цНет,сНет,ВКЛ); кнОтмена:=Кнопка.Создать(-2,позОтмена,цОтмена,Поле.сОтмена,ВКЛ); (* заполняем наделы *) подложка.цветНадписи[Надел.сОбычный]:=Надел.цПредупреждения; подложка.цветБуквицы[Надел.сОбычный]:=Надел.цБуквицыПредупреждения; записка.цветНадписи[Надел.сОбычный]:=Надел.цПредупреждения; записка.цветБуквицы[Надел.сОбычный]:=Надел.цБуквицыПредупреждения; (* добавляем наделы вс порядке отрисовки и получения ввода *) Поле.ДобавитьНадел(поле,подложка); Поле.ДобавитьНадел(поле,записка); Поле.ДобавитьНадел(поле,черта); Поле.ДобавитьНадел(поле,кнДа); Поле.ДобавитьНадел(поле,кнНет); Поле.ДобавитьНадел(поле,кнОтмена); (* основная работа *) Поле.Рисовать(поле); ПОВТОРЯТЬ Поле.Проверить(поле) ДО поле.состояние # Поле.сРабота; (* восстанавливаем окружение *) Поле.Рисовать(окружение); ВОЗВРАТ поле.состояние КОН Выполнить; КОН ПолеСВопросом. |
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com
|
|